'use strict';

const { Service } = require('egg');
const ModelName = 'DataQuery'
class RouterService extends Service {
  /**
   * 根据分页和搜索条件获取
   * @param {Object} where 查询用户的条件
   * @param {Number} page 当前分页
   * @param {Number} pageSize 当前页每页多少条
   */
  async getPage(where, page, pageSize) {
    return this.ctx.model[ModelName].findAndCountAll({
      where,
      offset: pageSize * (page - 1),
      limit: pageSize,
      order:[
        // id 降序
        ['name','ASC']
      ],
    });
  }

  // 所有列表
  async allList(where) {
    return this.ctx.model[ModelName].findAll({
      where,
      order:[
        // id 降序
        ['name','ASC']
      ],
    });
  }
  async findOne(id) {
    return this.ctx.model[ModelName].findOne({
      where: {
        id,
      },
    });
  }

  /**
   * 光照强度异常
   * 低等级报警：光照强度超过1000±100 Lux。
   * 中等级报警：光照强度超过1000±200 Lux。
   * 高等级报警：光照强度超过1000±300 Lux。
   */
    async handleLightAlarm(data) {
      let result = {
        level: '',
        message: ''
      }
      if(data.value > 1000 + 300 || data.value < 1000 - 300) {
        result.level = '3'
        result.message = '光照强度超过1000±300 Lux'
      } else if(data.value > 1000 + 200 || data.value < 1000 - 200) {
        result.level = '2'
        result.message = '光照强度超过1000±200 Lux'
      } else if(data.value > 1000 + 100 || data.value < 1000 - 100) {
        result.level = '1'
        result.message = '光照强度超过1000±100 Lux'
      }
      if (result.level) {
        await this.ctx.model.Alarm.create({
            bus_val: data.value + 'Lux',
          type: '2',
          level: result.level,
          message: result.message,
        });
      }
    }

  /**
   * 温度异常
   * 低等级报警：温度超过67.5±2°C。
   * 中等级报警：温度超过67.5±5°C。
   * 高等级报警：温度超过67.5±7.5°C。
   */
    async handleTemperatureAlarm(data) {
        let result = {
            level: '',
            message: ''
        }
        if(data.value > 67.5 + 7.5 || data.value < 67.5 - 7.5) {
            result.level = '3'
            result.message = '温度超过67.5±7.5°C'
        } else if(data.value > 67.5 + 5 || data.value < 67.5 - 5) {
            result.level = '2'
            result.message = '温度超过67.5±5°C'
        } else if(data.value > 67.5 + 2 || data.value < 67.5 - 2) {
            result.level = '1'
            result.message = '温度超过67.5±2°C'
        }
        if (result.level) {
            await this.ctx.model.Alarm.create({
                bus_val: data.value + '°C',
                type: '3',
                level: result.level,
                message: result.message,
            });
        }
    }

    /**
     * 电池容量异常
     * 低等级报警：电池容量低于20%。
     * 中等级报警：电池容量低于15%。
     * 高等级报警：电池容量低于10%。
     */
    async handleBatteryAlarm(data) {
        let result = {
            level: '',
            message: ''
        }
        if(data.value < 10) {
            result.level = '3'
            result.message = '电池容量低于10%'
        } else if(data.value < 15) {
            result.level = '2'
            result.message = '电池容量低于15%'
        } else if(data.value < 20) {
            result.level = '1'
            result.message = '电池容量低于20%'
        }
        if (result.level) {
            await this.ctx.model.Alarm.create({
                bus_val: data.value + '%',
                type: '4',
                level: result.level,
                message: result.message,
            });
        }
    }
  /**
   * 创建
   * @param {*} data 角色信息
   */
  async create(data) {
    if(data.type === 'radiation-data') {
      await this.handleLightAlarm(data)
    }
    if(data.type === 'temperature-data') {
        await this.handleTemperatureAlarm(data)
    }
    if (data.type === 'battery-charge-amount-data') {
        await this.handleBatteryAlarm(data)
    }
    return this.ctx.model[ModelName].create(data);
  }

  /**
   * 根据ID修改
   * @param {Number} id ID
   * @param {Object} data 要修改的信息
   */
  async update(id, data) {
    return await this.ctx.model[ModelName].update(data, { where: { id } });
  }

  /**
   * 根据id删除
   * @param {Number}
   */
  async deleteById(id) {
    return await this.ctx.model[ModelName].destroy({ where: { id } });
  }
}

module.exports = RouterService;
